# entities/Flag.py
# 旗帜类，表示火柴人需要到达的目标点
# 收集旗帜可获得奖励（用于后续强化学习）

class Flag:
    """
    旗帜类，表示一个可被收集的目标

    属性:
        x, y: 旗帜顶部中心坐标（视觉上旗帜插在地面上）
        width, height: 旗帜碰撞区域大小
        rect: 碰撞矩形 [left, top, width, height]
        collected: 是否已被火柴人收集
    """

    def __init__(self, x, y, width=20, height=30):
        """
        初始化旗帜

        参数:
            x (int): 旗帜中心 x 坐标
            y (int): 旗帜顶部 y 坐标（通常略高于平台）
            width (int): 旗帜碰撞宽度
            height (int): 旗帜碰撞高度
        """
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.collected = False  # 初始未被收集

        # 碰撞矩形：中心对称
        self.rect = [
            x - width // 2,  # left
            y,               # top
            width,
            height
        ]

    def is_collected_by(self, stickman):
        """
        检查是否被火柴人收集（矩形碰撞检测）

        参数:
            stickman: Stickman 实例

        返回:
            bool: 是否发生碰撞且未被收集
        """
        if self.collected:
            return False  # 已收集的旗帜不再触发

        # 获取两个矩形
        r1 = stickman.rect  # [x, y, w, h]
        r2 = self.rect

        # 检查是否重叠
        if (r1[0] < r2[0] + r2[2] and
            r1[0] + r1[2] > r2[0] and
            r1[1] < r2[1] + r2[3] and
            r1[1] + r1[3] > r2[1]):
            self.collected = True  # 标记为已收集
            return True

        return False

    def reset(self):
        """
        重置旗帜状态（用于下一局游戏）
        """
        self.collected = False